# vim:set et ft=sh sw=4 ts=4:

alias py=python
alias py3=python3
alias py2=python2
alias ipy=ipython
alias ipy3=ipython3
alias ipy2=ipython2
alias bpy=bpython
alias bpy3=bpython3
alias bpy2=bpython2

alias vi=vim
alias nv=nvim
alias mux=tmuxinator

alias toboard='xclip -selection clipboard'
alias acp='source acpyve'

# /* others apps */
export EDITOR=vim
export VISUAL=$EDITOR
export SVN_EDITOR=$EDITOR

for _tmp_terminal in alacritty xfce4-terminal urxvt; do
  export TERMINAL=`command -v $_tmp_terminal`
  [[ -n $TERMINAL ]] && unset _tmp_terminal && break
done

for _tmp_browser in chromium chrome firefox elinks; do
  export BROWSER=`command -v $_tmp_browser`
  [[ -n $BROWSER ]] && unset _tmp_browser && break
done

export CATALINA_HOME=/usr/share/tomcat8 # tomcat

#######################################################################
#                             appearance                              #
#######################################################################

export COLORTERM='truecolor'
export GREP_COLOR="1;32"
alias neofetch_local='neofetch --w3m ~/Pictures/LOCKSCREENS/kieslowski4-resize.png' # neofetch
alias grep='grep --color=auto'
alias diff='diff --color=auto'
alias sdcv='sdcv --color ' # stardict

# /* prompt */
# If not running interactively, don't do anything
# PS1='
# \u \t \033[31;1m>\033[0m \w
# \$ '

# colorful man
# man() {
#     LESS_TERMCAP_md=$'\e[01;31m' \
#     LESS_TERMCAP_me=$'\e[0m' \
#     LESS_TERMCAP_se=$'\e[0m' \
#     LESS_TERMCAP_so=$'\e[01;44;33m' \
#     LESS_TERMCAP_ue=$'\e[0m' \
#     LESS_TERMCAP_us=$'\e[01;32m' \
#     command man "$@"
# }

# /* less */
# export LESS=-R
# export LESS_TERMCAP_mb=$'\E[1;31m'     # begin bold
# export LESS_TERMCAP_md=$'\E[1;36m'     # begin blink
# export LESS_TERMCAP_me=$'\E[0m'        # reset bold/blink
# export LESS_TERMCAP_so=$'\E[01;44;33m' # begin reverse video
# export LESS_TERMCAP_se=$'\E[0m'        # reset reverse video
# export LESS_TERMCAP_us=$'\E[1;32m'     # begin underline
# export LESS_TERMCAP_ue=$'\E[0m'        # reset underline

#######################################################################
#                            custom funcs                             #
#######################################################################

# ex - archive extractor
# usage: ex <file>
ex() {
	if [ -f "$1" ]; then
		case $1 in
		*.tar.bz2) tar xjf "$1" ;;
		*.tar.gz) tar xzf "$1" ;;
		*.bz2) bunzip2 "$1" ;;
		*.rar) unrar x "$1" ;;
		*.gz) gunzip "$1" ;;
		*.tar) tar xf "$1" ;;
		*.tbz2) tar xjf "$1" ;;
		*.tgz) tar xzf "$1" ;;
		*.zip) unzip "$1" ;;
		*.Z) uncompress "$1" ;;
		*.7z) 7z x "$1" ;;
		*) echo "'$1' cannot be extracted via ex()" ;;
		esac
	else
		echo "'$1' is not a valid file"
	fi
}

#######################################################################
#                                 fzf                                 #
#######################################################################

# for fzf
export FZF_DEFAULT_OPTS="--preview '[ -f {} ] && file {} && head -30 {} '
                         --height 50% --reverse --border
                         --preview-window=down:30%"
# use fd
# export FZF_DEFAULT_COMMAND="fd --type f --hidden --follow --ignore-file ~/.config/search_ignore"
# use the silver searcher
# command -v 'ag' || echo "The silver search needs to be installed"
export FZF_DEFAULT_COMMAND="ag --hidden --nocolor -U -g ''"

# - The first argument to the function ($1) is the base path to start traversal
# - See the source code (completion.{bash,zsh}) for the details.
# _fzf_compgen_path() {
#   fd --hidden --follow --exclude ".git" . "$1"
# }

# Use fd to generate the list for directory completion
# _fzf_compgen_dir() {
#   fd --type d --hidden --follow --exclude ".git" . "$1"
# }

# fkill - kill process with fzf
fkill() {
	local pid
	pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')

	if [ "x$pid" != "x" ]; then
		echo "$pid" | xargs kill -${1:-9}
	fi
}

#######################################################################
#                                tmux                                 #
#######################################################################

# [ -z "$TMUX" ] && export TERM="xterm-256color"

# attach a default session (create it if not existed)
# and detach other connections bound to it
stmux() {
	if [[ -z "$TMUX" ]]; then
		default_tmux_sname=k
		tmuxinator $default_tmux_sname
		# tmux new -s $default_tmux_sname -d
		tmux choose-tree -t $default_tmux_sname -Zs
		tmux attach-session -t $default_tmux_sname -d
	else
		tmux choose-tree -Zs
	fi
}

#######################################################################
#                               for aur                               #
#######################################################################

export aurpref='https://aur.archlinux.org'

aurdl() {
	local url=${aurpref}/${1}.git
	echo "url: $url"
	git clone $url ~/Downloads/aurdl/$1
}

#######################################################################
#                             for python                              #
#######################################################################

# export VIRTUAL_ENV_DISABLE_PROMPT=

#######################################################################
#                            for alacritty                            #
#######################################################################

_init_alarcrity() {
	command -v alacritty >/dev/null || return

	local _shell=$(ps -ef | grep "^\w\+ \+$$" | sed 's/.* \+//')
	[[ $_shell == *zsh* ]] && _shell=zsh
	case $_shell in
	bash)
		local bash_complete_file=~/.config/alacritty/alacritty-completions.bash
		if [[ ! -e $bash_complete_file ]]; then
			local _url_for_bash=https://raw.githubusercontent.com/jwilm/alacritty/master/alacritty-completions.bash
			wget $_url_for_bash -o $bash_complete_file
		fi
		source $bash_complete_file
		;;
	esac
}

_init_alarcrity

#######################################################################
#                           for zsh plugins                           #
#######################################################################

# pj
export PROJECT_PATHS=(~/Workspace ~/Localworks)

# virtualenv wrapper
export WORKON_HOME=~/.venvs

#######################################################################
#                                pyenv                                #
#######################################################################

if [[ -d "$HOME/.pyenv" ]]; then
    export PATH="$PATH:$HOME/.pyenv/bin"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
fi

export PYTHON_CONFIGURE_OPTS="--enable-shared"

#######################################################################
#                                ruby                                 #
#######################################################################

if [[ -d "$HOME/.gem" ]]; then
    export PATH=$PATH:$(find $HOME/.gem -regex '.*ruby/[^/]+/bin')
fi

#######################################################################
#                                 svn                                 #
#######################################################################

svna() {
    while read _f ; do
        [[ -n "$_f" ]] && svn add $_f
    done <<< `svn status | grep '?' | awk '{print $2}'`
}

#######################################################################
#                               others                                #
#######################################################################

# draw a cow at start
command -v chuck_cow >/dev/null && chuck_cow

# load local config
[[ -e ~/.config/shrc.ext.local ]] && source ~/.config/shrc.ext.local
